package com.lihepeng.leecode.string;

import java.util.HashSet;

/**
 * 给你一个仅由大写英文字母组成的字符串，你可以将任意位置上的字符替换成另外的字符，总共可最多替换 k 次。在执行上述操作后，找到包含重复字母的最长子串的长度。
 * <p>
 * 注意:
 * 字符串长度 和 k 不会超过 104。
 * <p>
 * 示例 1:
 * <p>
 * 输入:
 * s = "ABAB", k = 2
 * <p>
 * 输出:
 * 4
 * <p>
 * 解释:
 * 用两个'A'替换为两个'B',反之亦然。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/longest-repeating-character-replacement
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution424 {
    // 替换元素 计算重复的最长子串长度

    public int characterReplacement(String s, int k) {

        return 0;
    }

    // 求最大重复的字符串
    public int characterUnReplacement(String s) {
        // 通过设置set 作为华东窗口
        HashSet<Character> set = new HashSet<>();
        int n = s.length();
        int ans = 0;
        int i = 0;
        int j = 0;
        while (i < n && j < n) {
            if (!set.contains(s.charAt(j))) {
                // 不包含元素 后面的指针向后面移动，同时计算最大长度
                set.add(s.charAt(j++));
                ans = Math.max(ans, j - 1);
            } else {
                // 重复包含 第一个指针向后移动
                set.remove(s.charAt(i++));
            }
        }
        return ans;
    }

}
